In computer networks, host computers communicate with each other by exchanging data packets over the network. Packets are sometimes lost, or discarded, somewhere in the network. Packet loss in a network is undesirable; it can cause unreliable program execution or, in some cases, network-wide problems with severe consequences. Therefore, network design should minimize packet loss.
Under various circumstances, it is possible for the network to become congested. Congestion refers to the fullness of buffers in network devices, such as bridges and routers. When the network is congested, it is more likely for packets to get lost due to lack of buffer space in network devices. Therefore, to minimize packet loss, network congestion should be avoided.
Networks have employed congestion control schemes to recover from congestion and to avoid congestion if possible. In these schemes, network devices, such as bridges and routers, provide congestion information to host computers in the network. In response to the congestion information, host computers take steps to reduce congestion, including increasing the amount of buffering in host memory and reducing the network loading. One way of reducing network loading to decrease the number of unacknowledged packets that are allowed on the network at a time. These techniques are described in chapter 5 of Computer Networks, 2nd ed., by Tanenbaum (Prentice Hall, 1988), and in "A Binary Feedback Scheme for Congestion Avoidance in Computer Networks" by K. K. Ramakrishnan and Raj Jain, ACM Transactions on Computer Systems, Vol. 8, No. 2, May 1991.
As network speeds have increased, the likelihood of buffer memory congestion on the host network adapter has also increased. This is because packet delivery times on the network have decreased markedly, but the time required to store a packet in host memory has not decreased commensurately. Therefore packets received from the network can begin to "pile up" in the buffer memory on the adapter. Current congestion control schemes do not detect adapter buffer memory congestion, and therefore do not effectively control or avoid packet loss that arises from it. It is desirable to minimize packet loss that arises from buffer memory congestion in the host network adapter.